//反转字符串中的单词 力扣151
//双指针（快慢指针）去除多余的空格字符 字符串各个局部的反转
class Solution {
public:
	// 移除多余的空格字符
	void removespace(string& s)
	{
		int slow = 0;
		int fast = 0;
		for(fast = 0; fast < s.size(); fast++)
		{
			if(s[fast] != ' ')
			{   //若slow不在起始位置，则先添加一个空格再继续处理
				if(slow != 0) s[slow++] = ' ';
				//将下一个空格之前的字符逐个复制，最后将结尾之前的字符逐个复制
				while(fast < s.size() && s[fast] != ' ' )
				{
					s[slow++] = s[fast++];
				}
			}
		}
		//重新分配字符串空间大小
		s.resize(slow);
	}
	string reverseWords(string s) {
		//先去除多余的空格
		removespace(s);
		//先整体反转
		reverse(s.begin(),s.end());
		//再逐个单词反转
		int j = 0;
		for(int i = 0; i <= s.size(); i++)
		{
			//顺序不能错，一定要先判断是否到了字符串末尾，否则会非法访问
			if(i == s.size() || s[i] == ' ' )
			{
				reverse(s.begin()+j,s.begin()+i);
				j = i + 1;
			}
		}
		return s;
	}
};
